package plp.orientadaObjetos1.util;

import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException;
import plp.orientadaObjetos1.expressao.leftExpression.Id;
import plp.orientadaObjetos1.memoria.AmbienteCompilacaoOO1;

public class TipoArray implements Tipo {
	protected String nome;
	private Tipo tipoArray;

	public static final Id TIPO_ID_array = new Id("array");
	
	public TipoArray() {
		this.nome = "ARRAY";
	}

	public String getNome() {
		return nome;
	}

	@Override
	public String toString() {
		return this.nome;
	}

	public Tipo getTipoArray() {
		return tipoArray;
	}

	public void setTipoArray(Tipo tipoArray) {
		this.tipoArray = tipoArray;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((nome == null) ? 0 : nome.hashCode());
		result = prime * result
				+ ((tipoArray == null) ? 0 : tipoArray.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (obj instanceof TipoArray) {
			return this.nome.equals(((TipoArray)obj).getNome());
		}
		return false;
	}

	@Override
	public Id getTipo() {
		return TIPO_ID_array;
	}

	@Override
	public boolean eValido(AmbienteCompilacaoOO1 ambiente) throws ClasseNaoDeclaradaException {
		return this.getTipo() == TIPO_ID_array;
	}
	
}
